`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date:    20:11:58 10/20/2012 
// Design Name: 
// Module Name:    ControladorPong 
// Project Name: 
// Target Devices: 
// Tool versions: 
// Description: 
//
// Dependencies: 
//
// Revision: 
// Revision 0.01 - File Created
// Additional Comments: 
//
//////////////////////////////////////////////////////////////////////////////////
module ControladorPong(_clk_i, _rst_i,paleta_arriba_i,paleta_abajo_i,comience_i,velocidad_i,
							  hsync_o, vsync_o, RGB_o);
	//ENTRADAS
	input _clk_i, _rst_i;
	input paleta_arriba_i;
	input paleta_abajo_i;
	input comience_i;
	input [3:0] velocidad_i;
	
	//SALIDAS
	output hsync_o, vsync_o;
	output [7:0] RGB_o;
	 
	//WIRES
	wire [9:0]paleta_posicion;
	wire [9:0]bola_fila;
	wire [9:0]bola_columna;
	wire perdio;
	wire _rst_sync;
	wire arriba_sync;
	wire abajo_sync;
	wire comience_sync;
	
	//MODULODE FLIP-FLOPS ENCARGADO DE HACER LA SINCRONIZACIÓN DE LAS SEÑALES RECIBIDAS CON EL RELOJ INTERNO DE LA APLICACION
	sincronizador Sincron(._clk_i(_clk_i),._rst_i(_rst_i),.up_i(paleta_arriba_i),.down_i(paleta_abajo_i),.start_i(comience_i),
								 ._sync_rst_o(_rst_sync),._sync_up_o(arriba_sync),._sync_down_o(abajo_sync),._sync_start_o(comience_sync));
	
	//MODULO ENCARGADO DE CONTROLAR EL FUNCIONAMIENTO DE LA APLICACION
	controladorFSM Controlador(._clk_i(_clk_i),._sync_rst_i(_rst_sync),.inicia_i(comience_sync),
										._sync_up_i(arriba_sync),._sync_down_i(abajo_sync),.velocidad_i(velocidad_i),
										.posicion_bola_fila_o(bola_fila),.posicion_bola_columna_o(bola_columna),
										.posicion_paleta(paleta_posicion),.fin_juego_o(perdio));
	
	//MODULO ENCARGADO DE HACER LOS REFRESCAMIENTOS DE LA IMAGEN EN LA PANTALLA
	conexion_vga VGA(._clk_i(_clk_i),._rst_i(_rst_sync),.posicion_paleta_i(paleta_posicion),
						  .posicion_bola_fila_i(bola_fila),.posicion_bola_columna_i(bola_columna),.perdio_i(perdio),
						  .RGB_o(RGB_o),.hsync_o(hsync_o),.vsync_o(vsync_o));

endmodule
